﻿// // ******************************************************************
// //       /\ /|       @file       BasicsHelper.cs
// //       \ V/        @brief      await29
// //       | "")       @author     Await, 285283010@qq.com
// //       /  |
// //      /  \\        @Modified   2024-12-31 20:12
// //    *(__\_\        @Copyright  Copyright (c) , 2024-11-03 14:11 Await
// // ******************************************************************

using System.Text.Json;

namespace AutomaticSubtitles.Service.Infrastructure.Helper;

public static class BasicsHelper
{
    /// <summary>
    /// 仿base64的有序字典，其与base64相似，使用有限的字符，表示6bit的二进制，不足的地方补=。但是，与base64的区别是，字符串是按从小到大的次序表示000000到111111的数值的。
    /// </summary>
    private static readonly Dictionary<char, char> Dic = new()
    {
        { 'A', '$' }, { 'B', '-' }, { 'C', '0' }, { 'D', '1' }, { 'E', '2' }, { 'F', '3' }, { 'G', '4' },
        { 'H', '5' }, { 'I', '6' }, { 'J', '7' }, { 'K', '8' },
        { 'L', '9' }, { 'M', 'A' }, { 'N', 'B' }, { 'O', 'C' }, { 'P', 'D' }, { 'Q', 'E' }, { 'R', 'F' },
        { 'S', 'G' }, { 'T', 'H' }, { 'U', 'I' }, { 'V', 'J' },
        { 'W', 'K' }, { 'X', 'L' }, { 'Y', 'M' }, { 'Z', 'N' }, { 'a', 'O' }, { 'b', 'P' }, { 'c', 'Q' },
        { 'd', 'R' }, { 'e', 'S' }, { 'f', 'T' }, { 'g', 'U' },
        { 'h', 'V' }, { 'i', 'W' }, { 'j', 'X' }, { 'k', 'Y' }, { 'l', 'Z' }, { 'm', 'a' }, { 'n', 'b' },
        { 'o', 'c' }, { 'p', 'd' }, { 'q', 'e' }, { 'r', 'f' },
        { 's', 'g' }, { 't', 'h' }, { 'u', 'i' }, { 'v', 'j' }, { 'w', 'k' }, { 'x', 'l' }, { 'y', 'm' },
        { 'z', 'n' }, { '0', 'o' }, { '1', 'p' }, { '2', 'q' },
        { '3', 'r' }, { '4', 's' }, { '5', 't' }, { '6', 'u' }, { '7', 'v' }, { '8', 'w' }, { '9', 'x' },
        { '+', 'y' }, { '/', 'z' }, { '=', '!' }
    };


    /// <summary>
    /// Deserializes from stream.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="stream">The stream.</param>
    /// <returns>``0.</returns>
    public static T? DeserializeFromStream<T>(this Stream stream)
    {
        return JsonSerializer.Deserialize<T>(stream);
    }


    public static string GetId()
    {
        return Guid.NewGuid().ToString();
    }
    // public static string GetId()
    // {
    //     var gid = Guid.NewGuid().ToByteArray();          // 获取唯一的guid，对应uuid的版本应该是v4。此处直接获取其byte数组。
    //     var devalue = DateTime.Now.Ticks;                //获取当前时间到1年1月1日的总ticks数，ticks单位是100ns，即万分之一毫秒。
    //     var types = BitConverter.GetBytes(devalue);      // 将ticks时间戳转换为字节数组，默认是小端。
    //     var bytes = new byte[gid.Length + types.Length]; // 实例化新的数字，用以存放时间值和GUID值。
    //     for (long i = 0; i < types.Length; i++) bytes[i] = types[types.Length - i - 1];
    //     gid.CopyTo(bytes, types.Length);
    //     var b64 = Convert.ToBase64String(bytes);
    //     var ss = b64.ToArray();
    //     for (var i = 0; i < ss.Length; i++) ss[i] = Dic[ss[i]];
    //     return new string(ss);
    // }
}